export interface IGiveGift {
  GiveDolls(): string;
  GiveFlowers(): string;
  GiveChocolate(): string;
}

export class Pursuit implements IGiveGift {
  private mm: SchoolGirl;
  constructor(mm: SchoolGirl) {
    this.mm = mm;
  }

  public GiveDolls(): string {
    return `${this.mm.Name} 送你洋娃娃`;
  }
  public GiveFlowers(): string {
    return `${this.mm.Name} 送你鲜花`;
  }
  public GiveChocolate(): string {
    return `${this.mm.Name} 送你巧克力`;
  }
}

export class ProxyV3 implements IGiveGift {
  private gg: Pursuit;

  constructor(mm: SchoolGirl) {
    this.gg = new Pursuit(mm);
  }

  public GiveDolls(): string {
    return this.gg.GiveDolls();
  }
  public GiveFlowers(): string {
    return this.gg.GiveFlowers();
  }
  public GiveChocolate(): string {
    return this.gg.GiveChocolate();
  }
}

export class SchoolGirl {
  private name = "";

  get Name(): string {
    return this.name;
  }

  set Name(val) {
    this.name = val;
  }
}
